PHP FeedbackLocale Model klasse
Home

PHP FeedbackLocale Model klasse

PHP FeedbackLocale Model klasse

Elke gebruiker wil het liefst in zijn eigen taal toegesproken worden.

Probleem

In een eerste opwelling zouden we enkele globale constanten kunnen creëren en een globale array om de tekstboodschappen in op te slaan. Dat levert wel direct een resultaat. Toch gaan we dit niet doen en via de lange voorbereidingsweg gaan. We maken een klasse die alle functionaliteit van het lokaliseren van tekstboodschappen netjes encapsuleert zodat we die klasse overal in onze applicatie kunnen meenemen en gebruiken.

Met de Feedbacl klasse beschikken we over een logboek waarin we tekstboodschappen kunnen opschrijven. We willen echter ook de mogelijkheid om tekstboodschappen in verschillende talen op te schrijven. Bovendien hebben we een manier nodig om onze applicatie in een taal naar keuze feedback te geven.

We kunnen de MessageFormatter klasse van PHP combineren met onze Feedback klasse om gemakkelijk van de ene naar de andere taal over te schakelen.

Design

We willen zo weinig mogelijk aan de klassen die we al hebben, Log en Feedback, veranderen en toch de lokalisatie functionaliteit implementeren.

Het lijkt ons een goed idee om een nieuwe feedback klasse te creëren die overerft van de Feedback klasse en de lokalisatie functionaliteit daarin toe te voegen. We geven die nieuwe klasse de naam FeedbackLocale en slaan die op in een bestand met de naam FeedbackLocale.php in de map modernways/dialog/src.

We koppelen die nieuwe functionaliteit aan onze mogelijkheid om naar een logboek te schrijven. We maken een nieuwe klasse die in de lokale taal in het logboek kan schrijven.

De nieuwe klasse bevat het woordenboek met de boodschappen in alle talen die door de app ondersteund moeten worden. Daarnaast voegen we een resem methodes toe om het 'klappen' in lokale talen te vergemakelijken. De volgende methode roept de code die eigenlijk de vertaling doet op:

public function connectionFailed($hostName, $databaseName)
{
    return \MessageFormatter::formatMessage($this->locale,
        $this->message[$this->locale]['CONNECTION'],
        array($hostName, $databaseName, 'f'));
}

Dan volstaat het om de methode op te roepen met twee argumenten: de hostnaam en de databasenaam:

$text = $this->log->connectionEstablished($this->hostName, $this->databaseName);

De constructor initialiseert de landstelling standaard in op en_US. Je kan die instellingen wijzigen door de gewenste locale als argument aan de constructor van de LogApp mee te geven:

Velden

naam gegevenstype beschrijving
$locale string de landsinstelling die doorheen de app gebruikt wordt
$message associatieve array bevat de tekstboodschappen voor de taalinstellingen die door de app ondersteund worden

Methoden

We kiezen ervoor om voor elke foutmelding een methode te maken. Dat is wel omslachtig in het begin maar in het verder gebruik in de applicatie veel gemakkelijker. Ben toch nog niet helemaal zeker van die manier van werken...

naam Bereik retour data type parameter beschrijving
__construct public void $locale stelt de landinstelling in; standaard en_US
connectionFailed public string $hostName $databaseName Connection to host localhost to WWWET database failed.
connectionOpened public string $hostName $databaseName Connection to host localhost to WWWET database succesfull.
connectionClosed public string $hostName $databaseName Connection to host localhost to WWWET database disconnected.
connectionNotConnected public string $hostName $databaseName Connection to host localhost to WWWET database not connected.
connectionEstablished public string $hostName $databaseName Connection to host localhost to WWWET already exists.

We voegen hier effenaan nieuwe methoden aan toe.

We gaan die nieuwe klasse nu eerst uitproberen met de Connection klasse.

JI
2016-12-12 13:08:42